package zisu.algorithm.algorithm.LinkedList;

/**
 * @Author: 蔡翔
 * @Date: 2019/12/6 10:56
 * @Version 1.0
 */
public class Solution2033 {
    public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }

    //removeElements 返回的是 head.next 后的结点。
    public ListNode removeElements(ListNode head,int val){
        if(head == null){
            return null;
        }
        //把这个数组分割成无线小的 结点（递归）
        ListNode res = removeElements(head.next,val);
        //在回归阶段，判断每个值是否满足val。
        //如果满足 就把这个结点（head）给排除掉，return 它的 next结点
        if(head.val == val){
            return res;
        }
        //如果不满足，那么这个结点 也包含进去（这个结点的next指向后续的链），在return 这个head。
        else {
            head.next = res;
            return head;
        }
    }

    //精简版
    /**
     *
     * @param head
	 * @param val
     * @return zisu.algorithm.algorithm.LinkedList.Solution2033.ListNode
     * @author caixiang
     * @desc:
     * @date 2019/12/6 13:58
     */
    public ListNode removeElements1(ListNode head,int val){
        if(head == null){
            return null;
        }

        head.next = removeElements(head.next,val);
        if(head.val == val){
            return head.next;
        }else {
            return head;
        }
        //更精简版本。
        //return head.val == val? head.next : head;
    }

    public static void main(String[] args) {
        int[] num = {1,2,3,4,5,6,7,8,9};
       /* ListNode head = new ListNode(num);
        System.out.println(head);
        //删除 结点值为6 的数
        ListNode res = (new Solution2033()).removeElements(head,6);
        System.out.println(res);*/
    }
}
